package com.geticsen.leetcode;

//https://leetcode-cn.com/problems/add-two-numbers/
public class AddTwoNumbers {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        //一定注意这里初始值不要用0 用一个复数用来表示没有初始化
        ListNode listNode = new ListNode(-1);
        //每一次用于当前计算的node
        ListNode cur = new ListNode();
        //求和中间值
        int temp = 0;
        //只要有一个不为空就继续计算
        while (l1 != null || l2 != null) {
            //因为l1 与 l2 长度未知所以分开加就可以了
            if (l1 != null) {
                temp += l1.val;
                l1 = l1.next;
            }
            if (l2 != null) {
                temp += l2.val;
                l2 = l2.next;
            }
            //当前值要除掉进位
            cur.val = temp % 10;
            //未初始化就初始化一个
            if (listNode.val == -1) {
                listNode = cur;
            }
            //有一个没有结束就继续执行加法所以节点继续增加
            if (l1 != null || l2 != null) {
                cur.next = new ListNode();
                cur = cur.next;
            }
            //计算进位保留到下一次计算
            temp = (temp / 10) % 10;
        }
        //计算结束但是temp部位0则需要把进位增加到末尾
        if (temp != 0) {
            cur.next = new ListNode(temp);
        }
        return listNode;
    }
}
